function validate_fields(form, validatelist)
{
    for (fieldname in validatelist)
    {
        var field_filters = validatelist[fieldname];
        var ele = form.elements[fieldname];
        var message = field_filters['message'];
        var message2 = null;
        var field_name = field_filters['fieldname'];
        for(validator in field_filters)
        {
            var filter_value = field_filters[validator];
            switch(validator)
            {
                case 'date':
                    message2 = message;
                    if(message2 == undefined)
                    {
                        message2 = 'В поле «'+field_name+'» должна быть записана дата.';
                    }
                    pattern = "(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\\d\\d";
                    var re = new RegExp(pattern);
                    if (!ele.value.match(re)){alert(message2);return false;}
                    break;
                case 'required':
                    message2 = message;
                    if(message2 == undefined)
                    {
                        message2 = 'Не заполнено поле «'+field_name+'».';
                    }
                    if (ele.value == ''){alert(message2);return false;}
                    break;
                case 'minlength':
                    message2 = message;
                    if(message2 == undefined)
                    {
                        if(filter_value == 1)
                        {
                            message2 = 'Поле «'+field_name+'» должно состоять минимум из '+filter_value+' символа.';                            
                        }
                        else
                        {
                            message2 = 'Поле «'+field_name+'» должно состоять минимум из '+filter_value+' символов.';
                        }
                    }
                    if (ele.value.length < filter_value){alert(message2);return false;}
                    break;
                case 'maxlength':
                    message2 = message;
                    if(message2 == undefined)
                    {
                        if(filter_value == 1)
                        {
                            message2 = 'Поле «'+field_name+'» должно состоять максимум из '+filter_value+' символа.';                            
                        }
                        else
                        {
                            message2 = 'Поле «'+field_name+'» должно состоять максимум из '+filter_value+' символов.';
                        }
                    }
                    if (ele.value.length > filter_value){alert(message2);return false;}
                    break;
                case 'regexp':
                    message2 = message;
                    if(message2 == undefined)
                    {
                        message2 = 'Поле «'+field_name+'» не соответствует маске ввода.';
                    }
                    if (!ele.value.match(filter_value)){alert(message2);return false;}
                    break;
                case 'char':
                    message2 = message;
                    if(message2 == undefined)
                    {
                        message2 = 'Поле «'+field_name+'» может содержать только буквы и цифры.';
                    }
                    if (!IsChar(ele.value)){alert(message2);return false;}
                    break;
                case 'numeric':
                    message2 = message;
                    if(message2 == undefined)
                    {
                        message2 = 'Поле «'+field_name+'» должно быть числом.';
                    }
                    if (!IsNumeric(ele.value)){alert(message2);return false;}
                    break;
                case 'minvalue':
                    message2 = message;
                    if(message2 == undefined)
                    {
                        message2 = 'Поле «'+field_name+'» должно быть минимум '+filter_value+'.';
                    }
                    if (ele.value < filter_value){alert(message2);return false;}
                    break;
                case 'email':
                    message2 = message;
                    if(message2 == undefined)
                    {
                        message2 = 'В поле «'+field_name+'» должен быть записан адрес электронной почты.';
                    }
                    var pattern = /^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i;
                    var re = new RegExp(pattern);
                    if (!ele.value.match(re)){alert(message2);return false;}
                    break;
                    
            }
        }
    }
    // form.save.disabled = true;
    return true;
}

function checkmask(mask, value)
{
    var masksymbol = "";
    var symbol = "";
    if(mask == "")
    {
        return true;
    }
    if(mask.length != value.length)
    {
        return false;
    }
    for(var i = 0; i < mask.length; i++)
    {
        masksymbol = mask.substr(i, 1);
        symbol = value.substr(i, 1);
        switch(masksymbol)
        {
            case "9":
                if(!IsNumeric(symbol)){return false;}
                break;
            case "_":
                if(!IsChar(symbol)){return false;}
                break;
            default:
                if(masksymbol!=symbol){return false;}
                break;
        }
    }
    return true;
}

function IsChar(sText)
{
    var ValidChars = "0123456789abcdefghjiklmnopqrstuvwxyzABCDEFGHJIKLMNOPQRSTUVWXYZабвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
    var Char;
    for (i = 0; i < sText.length; i++) 
    { 
        Char = sText.charAt(i); 
        if(ValidChars.indexOf(Char) == -1) 
        {
            return false;
        }
    }
    return true;
}

function IsNumeric(sText)
{
    if(sText.length < 1)
    {
        return false;
    }
    var ValidChars = "0123456789";
    var Char;
    for (i = 0; i < sText.length; i++) 
    { 
        Char = sText.charAt(i); 
        if(ValidChars.indexOf(Char) == -1) 
        {
            return false;
        }
    }
    return true;
}